package org.xx.armory.commons;

/**
 * 具有生命周期的对象。
 */
public interface LifeCycle
        extends AutoCloseable {
    /**
     * 标记对象已初始化完成，进入可用状态。
     *
     * @throws Exception
     *         如果初始化对象出错。
     * @see #isActive()
     */
    void initialize()
            throws Exception;


    /**
     * 标记对象已被释放，进入不可用状态。
     *
     * @throws Exception
     *         如果释放对象出错。
     * @see #isActive()
     */
    void dispose()
            throws Exception;

    /**
     * 判断当前对象是否处于存活状态。
     *
     * @return 当前对象是否处于存活状态。
     */
    boolean isActive();

    /**
     * 获取当前对象的已存活秒数，如果当前对象不处于存活状态则返回{@code 0L}。
     *
     * @return 当前对象的已存活秒数。
     */
    long getSurvivalTime();
}
